<?php


namespace app\back\controller;

use app\back\model\AdminModel;
use app\middleware\BackAuth;
use think\facade\Validate;
use think\Request;
use think\validate\ValidateRule;
use think\response\Json;

/**管理员管理
 * Class Admin
 * @package app\back\controller
 */
class Admin
{
    protected $middleware = [BackAuth::class];
    
    /** 管理员登录
     * @param Request $request
     * @return Json
     */
    public function login(Request $request)
    {
        // 接收参数
        $input['account'] = $request->post('account'); // 账号
        $input['password'] = $request->post('password'); // 密码
        // 参数校验
        $validate = Validate::rule([
            'account' => ValidateRule::regex("/^[0-9a-zA-Z]{3,12}$/", '账号包含0到9小大写字母3到12位'),
            'password' => ValidateRule::regex("/^[0-9a-zA-Z]{3,12}$/", '密码包含0到9小大写字母3到12位'),
        ]);
        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        $input['ip'] = $request->ip();
        return AdminModel::login($input);
    }

    public function getMenus(Request $request)
    {
        // 逻辑处理
        return AdminModel::getMenus($request->info);
    }

    /**获取管理员列表
     * @param Request $request
     * @return Json
     */
    public function getAdminList(Request $request)
    {
        // 获取参数
        $input['limit'] = $request->post('limit');
        $input['page'] = $request->post('page');
        $input['name'] = $request->post('name');
        $input['status'] = $request->post('status');
        // 参数校验
        $validate = Validate::rule([
            'limit' => ValidateRule::isRequire(null, '缺少参数'),
            'page' => ValidateRule::isRequire(null, '缺少参数'),
            'name' => function($value) {
                return $value === null ? '缺少参数' : true ;
            },
            'status' => function($value) {
                if ($value === null) {
                    return '缺少参数';
                } elseif ($value === '') {
                    return true;
                } elseif ($value == 1 || $value == 2) {
                    return true;
                } else {
                    return '非法数据';
                }
            }
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return AdminModel::getAdminList($input,$request->info);
    }

    /**获取管理员简单列表
     * @param Request $request
     * @return Json
     */
    public function getAdminSimple(Request $request)
    {
        // 逻辑处理
        return AdminModel::getAdminSimple($request->info);
    }

    /**添加管理员
     * @param Request $request
     * @return Json
     */
    public function addAdmin(Request $request)
    {
        // 获取参数
        $input['account'] = $request->post('account');
        $input['addpassword'] = $request->post('addpassword');
        $input['gender'] = $request->post('gender');
        $input['name'] = $request->post('name');
        $input['password'] = $request->post('password');
        $input['phone'] = $request->post('phone');
        $input['role_id'] = $request->post('role_id');
        // 参数校验
        $validate = Validate::rule([
            'name' => function($value) {
                if ($value === null) {
                    return '缺少参数';
                } elseif (mb_strlen($value) < 2 || mb_strlen($value)> 10) {
                    return '名称在 2 到 10 个字符';
                } else {
                    return true;
                }
            },
            'account' => ValidateRule::regex('/^[0-9a-zA-Z]{3,20}$/', '账号3到20位数字，大小写字母组成'),
            'password' => ValidateRule::regex('/^[0-9a-zA-Z]{6,12}$/', '密码6到12位数字，大小写字母组成'),
            'addpassword' => function($value,$all) {
                if ($value === null) {
                    return '缺少参数';
                } elseif ($value != $all['password']) {
                    return '两次输入密码不一致!';
                } else {
                    return true;
                }
            },
            'phone' => ValidateRule::regex('/^1[3456789]\d{9}$/', '请输入正确的手机号!'),
            'gender' => function($value) {
                if ($value === null) {
                    return '缺少参数';
                } elseif (in_array($value, [0,1,2])) {
                    return true;
                } else {
                    return '非法数据';
                }
            },
            'role_id' => ValidateRule::isNumber(null, '非法数据'),
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return AdminModel::addAdmin($input,$request->info);
    }

    /**修改管理员状态
     * @param Request $request
     * @return Json
     */
    public function changeAdminStatus(Request $request)
    {
        // 获取参数
        $input['id'] = $request->post('id');
        $input['status'] = $request->post('status');
        // 参数校验
        $validate = Validate::rule([
            'id' =>ValidateRule::regex("/^[1-9][0-9]*$/", '非法数据'),
            'status' => function($value) {
                if ($value === null) {
                    return '缺少参数';
                } elseif (in_array($value, ['1','2'], true)) {
                    return true;
                } else {
                    return '非法数据';
                }
            }
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return AdminModel::changeAdminStatus($input,$request->info);
    }

    /**获取单个管理员信息
     * @param Request $request
     * @return Json
     */
    public function getAdminOnly(Request $request)
    {
        // 获取参数
        $input['id'] = $request->post('id');
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::isRequire(null, '缺少参数')
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return AdminModel::getAdminOnly($input,$request->info);
    }

    /**删除管理员
     * @param Request $request
     * @return Json
     */
    public function delAdmin(Request $request)
    {
        // 获取参数
        $input['id'] = $request->post('id');
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::regex("/^[1-9][0-9]*$/", '非法数据'),
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return AdminModel::delAdmin($input,$request->info);
    }

    /**编辑管理员信息
     * @param Request $request
     * @return Json
     */
    public function editAdmin(Request $request)
    {
        // 获取参数
        $input['id'] = $request->post('id');
        $input['name'] = $request->post('name');
        $input['account'] = $request->post('account');
        $input['gender'] = $request->post('gender');
        $input['phone'] = $request->post('phone');
        $input['role_id'] = $request->post('role_id');
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::isRequire(null, '缺少参数'),
            'name' => function($value) {
                if ($value === null) {
                    return '缺少参数';
                } elseif (mb_strlen($value) < 2 || mb_strlen($value)> 10) {
                    return '名称在 2 到 10 个字符';
                } else {
                    return true;
                }
            },
            'account' => ValidateRule::regex('/^[0-9a-zA-Z]{3,20}$/', '账号3到20位数字，大小写字母组成'),
            'phone' => ValidateRule::regex('/^1[3456789]\d{9}$/', '请输入正确的手机号!'),
            'gender' => function($value) {
                if ($value === null) {
                    return '缺少参数';
                } elseif (in_array($value, [0,1,2])) {
                    return true;
                } else {
                    return '非法数据';
                }
            },
            'role_id' => ValidateRule::isNumber(null, '非法数据'),
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return AdminModel::editAdmin($input,$request->info);
    }

    /**强制修改管理员密码
     * @param Request $request
     * @return Json
     */
    public function forceAdminPwd(Request $request)
    {
        // 获取参数
        $input['password'] = $request->post('password');
        $input['forpassword'] = $request->post('forpassword');
        $input['id'] = $request->post('id');
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::isRequire(null, '缺少参数'),
            'password' => ValidateRule::regex('/^[0-9a-zA-Z]{6,12}$/', '密码6到12位数字，大小写字母组成'),
            'forpassword' => function($value,$all) {
                if ($value === null) {
                    return '缺少参数';
                } elseif ($value != $all['password']) {
                    return '两次输入密码不一致!';
                } else {
                    return true;
                }
            },
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return AdminModel::forceAdminPwd($input,$request->info);
    }
}